ã¹ã¬ããããŒã«ç®¡çã«ãããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®æŠå¿µãæ¢æ±ãããã®å©ç¹ãçè§£ããã°ããŒãã«ã³ã³ããã¹ãã§ã®ã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ãåäžãããæ¹æ³ãåŠã³ãŸãã
ã¹ã¬ããããŒã«ç®¡çïŒæé©ãªããã©ãŒãã³ã¹ã®ããã®ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®ãã¹ã¿ãŒ
ãœãããŠã§ã¢éçºãé²åãç¶ããäžã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããããšã¯æéèŠäºé ã§ããã¢ããªã±ãŒã·ã§ã³ãããè€éã«ãªãããŠãŒã¶ãŒã®æåŸ ãé«ãŸãã«ã€ããŠãç¹ã«ãã«ãã³ã¢ããã»ããµç°å¢ã«ãããŠãå¹ççãªãªãœãŒã¹å©çšã®å¿ èŠæ§ããã€ãŠãªãã»ã©é«ãŸã£ãŠããŸããã¹ã¬ããããŒã«ç®¡çã¯ããã®ç®æšãéæããããã®éèŠãªæè¡ã§ããã广çãªã¹ã¬ããããŒã«ã®èšèšã®äžæ žã«ã¯ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãšããŠç¥ãããæŠå¿µããããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®è€éãããã®å©ç¹ãããã³ãã®å®è·µçãªå®è£ ã«ã€ããŠè©³ãã説æããäžçäžã®éçºè ã«ãšã£ãŠè²ŽéãªæŽå¯ãæäŸããŸãã
ã¹ã¬ããããŒã«ã®çè§£
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãæãäžããåã«ãã¹ã¬ããããŒã«ã®åºæ¬çãªæŠå¿µãçè§£ããããšãäžå¯æ¬ ã§ããã¹ã¬ããããŒã«ã¯ãã¿ã¹ã¯ãå®è¡ããæºåãã§ãããäºåã«äœæãããåå©çšå¯èœãªã¹ã¬ããã®ã³ã¬ã¯ã·ã§ã³ã§ããåã¿ã¹ã¯ã«å¯ŸããŠã¹ã¬ãããäœæããã³ç Žæ£ãã代ããã«ïŒã³ã¹ãã®ãããæäœïŒãã¿ã¹ã¯ã¯ããŒã«ã«éä¿¡ãããå©çšå¯èœãªã¹ã¬ããã«å²ãåœãŠãããŸãããã®ã¢ãããŒãã¯ãã¹ã¬ããã®äœæãšç Žæ£ã«é¢é£ãããªãŒããŒããããå€§å¹ ã«åæžããããã©ãŒãã³ã¹ãšå¿çæ§ãåäžãããŸããã°ããŒãã«ã³ã³ããã¹ãã§å©çšå¯èœãªå ±æãªãœãŒã¹ã®ãããªãã®ã§ãã
ã¹ã¬ããããŒã«ã®äœ¿çšã®äž»ãªå©ç¹ã«ã¯ã以äžãå«ãŸããŸãã
- ãªãœãŒã¹æ¶è²»éã®åæžïŒã¹ã¬ããã®äœæãšç Žæ£ãæå°éã«æããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒåŸ ã¡æéãççž®ããã¹ã«ãŒããããåäžãããŸãã
- å®å®æ§ã®åäžïŒåæã¹ã¬ããã®æ°ãå¶åŸ¡ãããªãœãŒã¹ã®æ¯æžãé²ããŸãã
- ã¿ã¹ã¯ç®¡çã®ç°¡çŽ åïŒã¿ã¹ã¯ã®ã¹ã±ãžã¥ãŒãªã³ã°ãšå®è¡ã®ããã»ã¹ãç°¡çŽ åããŸãã
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®æ žå¿
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãå©çšå¯èœãªã¹ã¬ããéã§ã¯ãŒã¯ããŒããåçã«ãã©ã³ã¹ãããããã«ãã¹ã¬ããããŒã«å ã§äœ¿çšããã匷åãªæè¡ã§ããæ¬è³ªçã«ãã¢ã€ãã«ç¶æ ã®ã¹ã¬ããã¯ãããžãŒç¶æ ã®ã¹ã¬ãããŸãã¯ä»ã®ã¯ãŒã¯ãã¥ãŒããç©æ¥µçã«ã¿ã¹ã¯ããçã¿ãŸããããã®ç©æ¥µçãªã¢ãããŒãã«ãããã©ã®ã¹ã¬ãããé·æéã¢ã€ãã«ç¶æ ã«ãªãããšããªããå©çšå¯èœãªãã¹ãŠã®åŠçã³ã¢ã®å©çšãæå€§åããŸããããã¯ãããŒãã®ããã©ãŒãã³ã¹ç¹æ§ãç°ãªãå¯èœæ§ãããã°ããŒãã«åæ£ã·ã¹ãã ã§äœæ¥ããå Žåã«ç¹ã«éèŠã§ãã
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®äžè¬çãªæ©èœã®å èš³ã以äžã«ç€ºããŸãã
- ã¿ã¹ã¯ãã¥ãŒïŒããŒã«å ã®åã¹ã¬ããã¯ãå€ãã®å Žåãç¬èªã®ã¿ã¹ã¯ãã¥ãŒïŒéåžžã¯deque â åæ¹åãã¥ãŒïŒãä¿æããŸããããã«ãããã¹ã¬ããã¯ã¿ã¹ã¯ãç°¡åã«è¿œå ããã³åé€ã§ããŸãã
- ã¿ã¹ã¯ã®éä¿¡ïŒã¿ã¹ã¯ã¯ãæåã¯éä¿¡ã¹ã¬ããã®ãã¥ãŒã«è¿œå ãããŸãã
- ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ïŒã¹ã¬ãããç¬èªã®ãã¥ãŒå ã®ã¿ã¹ã¯ã䜿ãæãããšãå¥ã®ã¹ã¬ãããã©ã³ãã ã«éžæããä»ã®ã¹ã¬ããã®ãã¥ãŒããã¿ã¹ã¯ããçããããšããŸããçãã¹ã¬ããã¯ãç«¶åãšæœåšçãªç«¶åç¶æ ãæå°éã«æããããã«ãéåžžã¯çããã¥ãŒã®ãå é ããŸãã¯å察åŽã®ç«¯ããååŸããŸããããã¯å¹çã«ãšã£ãŠéèŠã§ãã
- è² è·åæ£ïŒã¿ã¹ã¯ãçããã®ããã»ã¹ã«ããããã¹ãŠã®å©çšå¯èœãªã¹ã¬ããéã§äœæ¥ãåçã«åæ£ãããããã«ããã¯ãé²ããå šäœçãªã¹ã«ãŒããããæå€§åããŸãã
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å©ç¹
ã¹ã¬ããããŒã«ç®¡çã§ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãæ¡çšããå©ç¹ã¯æ°å€ããéèŠã§ãããããã®å©ç¹ã¯ãã°ããŒãã«ãœãããŠã§ã¢éçºãšåæ£ã³ã³ãã¥ãŒãã£ã³ã°ãåæ ããã·ããªãªã§å¢å¹ ãããŸãã
- ã¹ã«ãŒãããã®åäžïŒãã¹ãŠã®ã¹ã¬ãããã¢ã¯ãã£ãã«ä¿ã€ããšã«ãããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãåäœæéãããã®ã¿ã¹ã¯ã®åŠçãæå€§åããŸããããã¯ãå€§èŠæš¡ãªããŒã¿ã»ãããŸãã¯è€éãªèšç®ãæ±ãå Žåã«éåžžã«éèŠã§ãã
- åŸ ã¡æéã®ççž®ïŒã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãã¿ã¹ã¯ã®å®äºã«ãããæéãæå°éã«æããã®ã«åœ¹ç«ã¡ãŸããã¢ã€ãã«ç¶æ ã®ã¹ã¬ããã¯ãå©çšå¯èœãªäœæ¥ãçŽã¡ã«åãåãããšãã§ããããã§ããããã¯ããŠãŒã¶ãŒãããªãæ±äº¬ãããšãã¹ã¢ã€ã¬ã¹ã®ã©ãã«ããŠããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«çŽæ¥è²¢ç®ããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ããŒã¹ã®ã¹ã¬ããããŒã«ã¯ãå©çšå¯èœãªåŠçã³ã¢ã®æ°ã«åãããŠé©åã«ã¹ã±ãŒãªã³ã°ãããŸããã³ã¢ã®æ°ãå¢ãããšãã·ã¹ãã ã¯ããå€ãã®ã¿ã¹ã¯ãåæã«åŠçã§ããŸããããã¯ãå¢å ãããŠãŒã¶ãŒã®ãã©ãã£ãã¯ãšããŒã¿ããªã¥ãŒã ãåŠçããããã«äžå¯æ¬ ã§ãã
- 倿§ãªã¯ãŒã¯ããŒãã«ãããå¹çïŒã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãã¿ã¹ã¯ã®å®è¡æéãç°ãªãã·ããªãªã§åªããŠããŸããçãã¿ã¹ã¯ã¯ããã«åŠçãããé·ãã¿ã¹ã¯ã¯ä»ã®ã¹ã¬ãããäžåœã«ãããã¯ãããäœæ¥ãéå°å©çšãããŠããã¹ã¬ããã«ç§»åã§ããŸãã
- åçç°å¢ãžã®é©å¿æ§ïŒã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãã¯ãŒã¯ããŒããæéã®çµéãšãšãã«å€åããå¯èœæ§ã®ããåçç°å¢ã«æ¬è³ªçã«é©å¿å¯èœã§ããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¢ãããŒãã«åºæã®åçè² è·åæ£ã«ãããã·ã¹ãã ã¯ã¯ãŒã¯ããŒãã®ã¹ãã€ã¯ãšããããã«èª¿æŽã§ããŸãã
å®è£ äŸ
ããã€ãã®äžè¬çãªããã°ã©ãã³ã°èšèªã®äŸãèŠãŠã¿ãŸãããããããã¯ãå©çšå¯èœãªããŒã«ã®ã»ãã®äžéšã衚ããŠããŸããããããã¯äœ¿çšãããäžè¬çãªææ³ã瀺ããŠããŸããã°ããŒãã«ãããžã§ã¯ããæ±ãå Žåãéçºè ã¯ãéçºäžã®ã³ã³ããŒãã³ãã«å¿ããŠããã€ãã®ç°ãªãèšèªã䜿çšããå¿ èŠãããå ŽåããããŸãã
Java
Javaã®java.util.concurrentããã±ãŒãžã«ã¯ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã䜿çšãã匷åãªãã¬ãŒã ã¯ãŒã¯ã§ããForkJoinPoolãçšæãããŠããŸããããã¯ãåå²çµ±æ²»ã¢ã«ãŽãªãºã ã«ç¹ã«é©ããŠããŸãã `ForkJoinPool`ã¯ã䞊åã¿ã¹ã¯ãã°ããŒãã«ãªãœãŒã¹éã§åå²ã§ããã°ããŒãã«ãœãããŠã§ã¢ãããžã§ã¯ãã«æé©ã§ãã
äŸïŒ
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class WorkStealingExample {
static class SumTask extends RecursiveTask<Long> {
private final long[] array;
private final int start;
private final int end;
private final int threshold = 1000; // Define a threshold for parallelization
public SumTask(long[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Long compute() {
if (end - start <= threshold) {
// Base case: calculate the sum directly
long sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else {
// Recursive case: divide the work
int mid = start + (end - start) / 2;
SumTask leftTask = new SumTask(array, start, mid);
SumTask rightTask = new SumTask(array, mid, end);
leftTask.fork(); // Asynchronously execute the left task
rightTask.fork(); // Asynchronously execute the right task
return leftTask.join() + rightTask.join(); // Get the results and combine them
}
}
}
public static void main(String[] args) {
long[] data = new long[2000000];
for (int i = 0; i < data.length; i++) {
data[i] = i + 1;
}
ForkJoinPool pool = new ForkJoinPool();
SumTask task = new SumTask(data, 0, data.length);
long sum = pool.invoke(task);
System.out.println("Sum: " + sum);
pool.shutdown();
}
}
ãã®Javaã³ãŒãã¯ãæ°å€ã®é
åãåèšããããã®åå²çµ±æ²»ã¢ãããŒãã瀺ããŠããŸããForkJoinPoolãšRecursiveTaskã¯ã©ã¹ã¯å
éšçã«ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãå®è£
ããå©çšå¯èœãªã¹ã¬ããéã§äœæ¥ãå¹ççã«åæ£ããŸããããã¯ãã°ããŒãã«ã³ã³ããã¹ãã§äžŠåã¿ã¹ã¯ãå®è¡ããå Žåã«ããã©ãŒãã³ã¹ãåäžãããæ¹æ³ã®å®ç§ãªäŸã§ãã
C++
C++ã¯ãIntelã®Threading Building BlocksïŒTBBïŒããã¹ã¬ãããšfuturesã®æšæºã©ã€ãã©ãªã®ãµããŒããªã©ã®åŒ·åãªã©ã€ãã©ãªãæäŸããŠãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãå®è£ ããŸãã
TBBã䜿çšããäŸïŒTBBã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ãå¿ èŠïŒïŒ
#include <iostream>
#include <tbb/parallel_reduce.h>
#include <vector>
using namespace std;
using namespace tbb;
int main() {
vector<int> data(1000000);
for (size_t i = 0; i < data.size(); ++i) {
data[i] = i + 1;
}
int sum = parallel_reduce(data.begin(), data.end(), 0, [](int sum, int value) {
return sum + value;
},
[](int left, int right) {
return left + right;
});
cout << "Sum: " << sum << endl;
return 0;
}
ãã®C++ã®äŸã§ã¯ãTBBãæäŸããparallel_reduce颿°ãèªåçã«ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãåŠçããŸããããã¯ãåèšåŠçãå©çšå¯èœãªã¹ã¬ããéã§å¹ççã«åå²ãã䞊ååŠçãšã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å©ç¹ã掻çšããŸãã
Python
Pythonã®çµã¿èŸŒã¿concurrent.futuresã¢ãžã¥ãŒã«ã¯ãã¹ã¬ããããŒã«ãšããã»ã¹ããŒã«ã管çããããã®é«ã¬ãã«ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãããJavaã®ForkJoinPoolãC++ã®TBBãšåãæ¹æ³ã§ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãçŽæ¥å®è£
ããŠããŸããããã ããrayãdaskãªã©ã®ã©ã€ãã©ãªã¯ãç¹å®ã®ã¿ã¹ã¯ã«å¯Ÿãã忣ã³ã³ãã¥ãŒãã£ã³ã°ãšã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã«å¯ŸããŠãããæŽç·ŽããããµããŒããæäŸããŸãã
ååã瀺ãäŸïŒçŽæ¥ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãªãã§ãããThreadPoolExecutorã䜿çšãã䞊åã¿ã¹ã¯å®è¡ã説æïŒïŒ
import concurrent.futures
import time
def worker(n):
time.sleep(1) # Simulate work
return n * n
if __name__ == '__main__':
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
results = executor.map(worker, numbers)
for number, result in zip(numbers, results):
print(f'Number: {number}, Square: {result}')
ãã®Pythonã®äŸã¯ãã¹ã¬ããããŒã«ã䜿çšããŠã¿ã¹ã¯ãåæã«å®è¡ããæ¹æ³ã瀺ããŠããŸããJavaãTBBãšåãæ¹æ³ã§ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãå®è£ ããŠããŸããããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãæé©åããããšããäžæ žçãªååã§ãããè€æ°ã®ã¹ã¬ãããå©çšããŠã¿ã¹ã¯ã䞊åã«å®è¡ããæ¹æ³ã瀺ããŠããŸãããã®æŠå¿µã¯ãã°ããŒãã«ã«åæ£ããããªãœãŒã¹ã«å¯ŸããŠPythonããã®ä»ã®èšèªã§ã¢ããªã±ãŒã·ã§ã³ãéçºããéã«éèŠã§ãã
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å®è£ ïŒéèŠãªèæ ®äºé
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®æŠå¿µã¯æ¯èŒçåçŽã§ããã广çã«å®è£ ããã«ã¯ãããã€ãã®èŠçŽ ãæ éã«æ€èšããå¿ èŠããããŸãã
- ã¿ã¹ã¯ã®ç²åºŠïŒã¿ã¹ã¯ã®ãµã€ãºã¯éåžžã«éèŠã§ããã¿ã¹ã¯ãå°ããããïŒçްç²åºŠïŒå Žåãã¹ãã£ãŒãªã³ã°ãšã¹ã¬ãã管çã®ãªãŒããŒããããå©ç¹ãäžåãå¯èœæ§ããããŸããã¿ã¹ã¯ã倧ããããïŒç²ç²åºŠïŒå Žåãä»ã®ã¹ã¬ããããéšåçãªäœæ¥ãçãããšãã§ããªãå ŽåããããŸããéžæã¯ã解決ãããåé¡ãšäœ¿çšãããŠããããŒããŠã§ã¢ã®ããã©ãŒãã³ã¹ç¹æ§ã«ãã£ãŠç°ãªããŸããã¿ã¹ã¯ãåå²ããããã®ãããå€ãéèŠã§ãã
- ç«¶åïŒå ±æãªãœãŒã¹ãç¹ã«ã¿ã¹ã¯ãã¥ãŒã«ã¢ã¯ã»ã¹ãããšãã¯ãã¹ã¬ããéã®ç«¶åãæå°éã«æããŸããããã¯ããªãŒãŸãã¯ã¢ãããã¯æäœã䜿çšãããšãç«¶åã®ãªãŒããŒããããæžããããšãã§ããŸãã
- ã¹ãã£ãŒãªã³ã°æŠç¥ïŒããŸããŸãªã¹ãã£ãŒãªã³ã°æŠç¥ãååšããŸããããšãã°ãã¹ã¬ããã¯å¥ã®ã¹ã¬ããã®ãã¥ãŒã®æåŸïŒLIFO â Last-InãFirst-OutïŒãŸãã¯å é ïŒFIFO â First-InãFirst-OutïŒããçãããšãã§ããã©ã³ãã ã«ã¿ã¹ã¯ãéžæããããšãã§ããŸããéžæã¯ãã¢ããªã±ãŒã·ã§ã³ãšã¿ã¹ã¯ã®æ§è³ªã«ãã£ãŠç°ãªããŸãã LIFOã¯ãäŸåé¢ä¿ã«çŽé¢ããå Žåã«ãããå¹ççã«ãªãåŸåããããããäžè¬çã«äœ¿çšãããŸãã
- ãã¥ãŒã®å®è£ ïŒã¿ã¹ã¯ãã¥ãŒã®ããŒã¿æ§é ã®éžæã¯ãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã䞡端ããã®å¹ççãªæ¿å ¥ãšåé€ãå¯èœã«ãããããDequeïŒåæ¹åãã¥ãŒïŒããã䜿çšãããŸãã
- ã¹ã¬ããããŒã«ã®ãµã€ãºïŒé©åãªã¹ã¬ããããŒã«ã®ãµã€ãºãéžæããããšãéèŠã§ããå°ããããããŒã«ã¯ãå©çšå¯èœãªã³ã¢ãå®å šã«æŽ»çšã§ããªãå¯èœæ§ããããŸããäžæ¹ã倧ããããããŒã«ã¯ãéå°ãªã³ã³ããã¹ãåãæ¿ããšãªãŒããŒãããã«ã€ãªããå¯èœæ§ããããŸããçæ³çãªãµã€ãºã¯ãå©çšå¯èœãªã³ã¢ã®æ°ãšã¿ã¹ã¯ã®æ§è³ªã«ãã£ãŠç°ãªããŸããããŒã«ãµã€ãºãåçã«æ§æããã®ãåççã§ããå ŽåããããããŸãã
- ãšã©ãŒåŠçïŒã¿ã¹ã¯ã®å®è¡äžã«çºçããå¯èœæ§ã®ããäŸå€ãåŠçããããã®å ç¢ãªãšã©ãŒåŠçã¡ã«ããºã ãå®è£ ããŸããäŸå€ãã¿ã¹ã¯å ã§é©åã«ãã£ãããããåŠçãããŠããããšã確èªããŸãã
- ç£èŠãšãã¥ãŒãã³ã°ïŒã¹ã¬ããããŒã«ã®ããã©ãŒãã³ã¹ã远跡ããå¿ èŠã«å¿ããŠã¹ã¬ããããŒã«ã®ãµã€ãºãã¿ã¹ã¯ã®ç²åºŠãªã©ã®ãã©ã¡ãŒã¿ã調æŽããããã®ç£èŠããŒã«ãå®è£ ããŸããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ç¹æ§ã«é¢ãã貎éãªããŒã¿ãæäŸã§ãããããã¡ã€ãªã³ã°ããŒã«ãæ€èšããŠãã ããã
ã°ããŒãã«ã³ã³ããã¹ãã§ã®ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°
ã°ããŒãã«ãœãããŠã§ã¢éçºãšåæ£ã·ã¹ãã ã®èª²é¡ãèæ ®ãããšãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å©ç¹ã¯ç¹ã«é åçã«ãªããŸãã
- äºæž¬äžå¯èœãªã¯ãŒã¯ããŒãïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®ãã©ãã£ãã¯ãšããŒã¿ããªã¥ãŒã ã®äºæž¬äžå¯èœãªå€åã«çŽé¢ããããšããããããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãããã®å€åã«åçã«é©å¿ããããŒã¯æãšãªãããŒã¯æã®äž¡æ¹ã§æé©ãªãªãœãŒã¹å©çšãä¿èšŒããŸããããã¯ãããŸããŸãªã¿ã€ã ãŸãŒã³ã®é¡§å®¢ã«ãµãŒãã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéèŠã§ãã
- 忣ã·ã¹ãã ïŒåæ£ã·ã¹ãã ã§ã¯ãã¿ã¹ã¯ã¯äžçäžã®è€æ°ã®ãµãŒããŒãŸãã¯ããŒã¿ã»ã³ã¿ãŒã«åæ£ãããå ŽåããããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã䜿çšããŠããããã®ãªãœãŒã¹éã§ã¯ãŒã¯ããŒãã®ãã©ã³ã¹ãåãããšãã§ããŸãã
- 倿§ãªããŒããŠã§ã¢ïŒã°ããŒãã«ã«ãããã€ãããã¢ããªã±ãŒã·ã§ã³ã¯ãããŸããŸãªããŒããŠã§ã¢æ§æã®ãµãŒããŒã§å®è¡ãããå ŽåããããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ããããã®éãã«åçã«èª¿æŽããå©çšå¯èœãªãã¹ãŠã®åŠçèœåãå®å šã«æŽ»çšãããããã«ããããšãã§ããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒã°ããŒãã«ãŠãŒã¶ãŒããŒã¹ãæé·ããã«ã€ããŠãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ã¢ããªã±ãŒã·ã§ã³ãå¹ççã«ã¹ã±ãŒãªã³ã°ãããããã«ããŸããããå€ãã®ãµãŒããŒã远å ããããæ¢åã®ãµãŒããŒã®å®¹éãå¢ããããšã¯ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ããŒã¹ã®å®è£ ã§ç°¡åã«è¡ãããšãã§ããŸãã
- éåææäœïŒå€ãã®ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã¯ãéåææäœã«å€§ããäŸåããŠããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã«ããããããã®éåæã¿ã¹ã¯ãå¹ççã«ç®¡çããå¿çæ§ãæé©åã§ããŸãã
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ããæ©æµãåããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®äŸïŒ
- ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒïŒCDNã¯ãã³ã³ãã³ããã°ããŒãã«ãªãµãŒããŒãããã¯ãŒã¯å šäœã«é ä¿¡ããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã䜿çšããŠãäžçäžã®ãŠãŒã¶ãŒãžã®ã³ã³ãã³ãé ä¿¡ãæé©åããã¿ã¹ã¯ãåçã«åæ£ãããããšãã§ããŸãã
- eã³ããŒã¹ãã©ãããã©ãŒã ïŒeã³ããŒã¹ãã©ãããã©ãŒã ã¯ã倧éã®ãã©ã³ã¶ã¯ã·ã§ã³ãšãŠãŒã¶ãŒãªã¯ãšã¹ããåŠçããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã«ããããããã®ãªã¯ãšã¹ããå¹ççã«åŠçãããã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
- ãªã³ã©ã€ã³ã²ãŒã ãã©ãããã©ãŒã ïŒãªã³ã©ã€ã³ã²ãŒã ã«ã¯ãäœãåŸ ã¡æéãšå¿çæ§ãå¿ èŠã§ããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã䜿çšããŠãã²ãŒã ã€ãã³ããšãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã®åŠçãæé©åã§ããŸãã
- éèååŒã·ã¹ãã ïŒé«é »åºŠååŒã·ã¹ãã ã¯ãéåžžã«äœãåŸ ã¡æéãšé«ãã¹ã«ãŒããããèŠæ±ããŸããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã掻çšããŠãååŒé¢é£ã®ã¿ã¹ã¯ãå¹ççã«åæ£ãããããšãã§ããŸãã
- ããã°ããŒã¿åŠçïŒã°ããŒãã«ãããã¯ãŒã¯å šäœã§å€§èŠæš¡ãªããŒã¿ã»ãããåŠçããããšã¯ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã䜿çšããŠæé©åã§ããŸããç°ãªãããŒã¿ã»ã³ã¿ãŒã®éå°å©çšãããŠãããªãœãŒã¹ã«äœæ¥ã忣ããããšã«ãã£ãŠè¡ãããŸãã
广çãªã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®ããã®ãã¹ããã©ã¯ãã£ã¹
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å¯èœæ§ãæå€§éã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãéµå®ããŠãã ããã
- ã¿ã¹ã¯ãæ éã«èšèšããïŒå€§ããªã¿ã¹ã¯ãã䞊è¡ããŠå®è¡ã§ããå°ããç¬ç«ãããŠãããã«åå²ããŸããã¿ã¹ã¯ã®ç²åºŠã¬ãã«ã¯ãããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ããŸãã
- é©åãªã¹ã¬ããããŒã«ã®å®è£
ãéžæããïŒJavaã®
ForkJoinPoolããéžæããèšèªã®åæ§ã®ã©ã€ãã©ãªãªã©ãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ããµããŒãããã¹ã¬ããããŒã«ã®å®è£ ãéžæããŸãã - ã¢ããªã±ãŒã·ã§ã³ãç£èŠããïŒã¹ã¬ããããŒã«ã®ããã©ãŒãã³ã¹ã远跡ããããã«ããã¯ãç¹å®ããããã®ç£èŠããŒã«ãå®è£ ããŸããã¹ã¬ããã®äœ¿çšçãã¿ã¹ã¯ãã¥ãŒã®é·ããã¿ã¹ã¯ã®å®äºæéãªã©ã®ã¡ããªãã¯ã宿çã«åæããŸãã
- æ§æã調æŽããïŒç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ãšã¯ãŒã¯ããŒãã®ããã©ãŒãã³ã¹ãæé©åããããã«ãããŸããŸãªã¹ã¬ããããŒã«ã®ãµã€ãºãšã¿ã¹ã¯ã®ç²åºŠã詊ããŸããããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠããããã¹ããããåæããæ¹åã®æ©äŒãç¹å®ããŸãã
- äŸåé¢ä¿ãæ éã«åŠçããïŒäºãã«äŸåããã¿ã¹ã¯ãæ±ãå Žåã¯ããããããã¯ãé²ããæ£ããå®è¡é åºã確ä¿ããããã«ãäŸåé¢ä¿ãæ éã«ç®¡çããŸãã futuresãpromisesãªã©ã®ææ³ã䜿çšããŠãã¿ã¹ã¯ãåæããŸãã
- ã¿ã¹ã¯ã¹ã±ãžã¥ãŒãªã³ã°ããªã·ãŒãæ€èšããïŒã¿ã¹ã¯é 眮ãæé©åããããã«ãããŸããŸãªã¿ã¹ã¯ã¹ã±ãžã¥ãŒãªã³ã°ããªã·ãŒãæ€èšããŸããããã«ã¯ãã¿ã¹ã¯ã¢ãã£ããã£ãããŒã¿ã®å±ææ§ãåªå é äœãªã©ã®èŠå ãèæ ®ããããšãå«ãŸããå ŽåããããŸãã
- 培åºçã«ãã¹ãããïŒããŸããŸãªè² è·æ¡ä»¶äžã§å æ¬çãªãã¹ããå®è¡ããŠãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å®è£ ãå ç¢ã§å¹ççã§ããããšã確èªããŸããè² è·ãã¹ãã宿œããŠãæœåšçãªããã©ãŒãã³ã¹ã®åé¡ãç¹å®ããæ§æã調æŽããŸãã
- ã©ã€ãã©ãªã宿çã«æŽæ°ããïŒäœ¿çšããŠããã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®ææ°ããŒãžã§ã³ã§ææ°ã®ç¶æ ãç¶æããŠãã ãããå€ãã®å Žåãã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã«é¢é£ããããã©ãŒãã³ã¹ã®æ¹åãšãã°ä¿®æ£ãå«ãŸããŠããŸãã
- å®è£ ãææžåããïŒã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ãœãªã¥ãŒã·ã§ã³ã®èšèšãšå®è£ ã®è©³çްãæç¢ºã«ææžåããŠãä»ã®äººãçè§£ããä¿å®ã§ããããã«ããŸãã
çµè«
ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãã¹ã¬ããããŒã«ç®¡çãæé©åããç¹ã«ã°ããŒãã«ã³ã³ããã¹ãã§ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæå€§åããããã®éèŠãªæè¡ã§ããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã¯ãå©çšå¯èœãªã¹ã¬ããéã§ã€ã³ããªãžã§ã³ãã«ã¯ãŒã¯ããŒãã®ãã©ã³ã¹ãåãããšã«ãããã¹ã«ãŒããããåäžãããåŸ ã¡æéãççž®ããã¹ã±ãŒã©ããªãã£ãä¿é²ããŸãããœãããŠã§ã¢éçºãäžŠè¡æ§ãšäžŠååŠçããŸããŸãåãå ¥ããããã«ãªããã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®çè§£ãšå®è£ ã¯ãå¿çæ§ãé«ããå¹ççã§ãå ç¢ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãŸããŸãéèŠã«ãªã£ãŠããŸãããã®ã¬ã€ãã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã«ãããéçºè ã¯ã¯ãŒã¯ã»ã¹ãã£ãŒãªã³ã°ã®å®å šãªåãæŽ»çšããŠãã°ããŒãã«ãŠãŒã¶ãŒããŒã¹ã®èŠæ±ã«å¯Ÿå¿ã§ããã髿§èœã§ã¹ã±ãŒã©ãã«ãªãœãããŠã§ã¢ãœãªã¥ãŒã·ã§ã³ãäœæã§ããŸãããŸããŸãã€ãªããã®åŒ·ãŸãäžçã«é²ãã«ã€ããŠããããã®ãã¯ããã¯ãç¿åŸããããšã¯ãäžçäžã®ãŠãŒã¶ãŒåãã«çã«é«æ§èœãªãœãããŠã§ã¢ãäœæããããšããŠãã人ã«ãšã£ãŠäžå¯æ¬ ã§ãã